home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / wifitap.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-03-29  |  6KB  |  201 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import os
  5. import sys
  6. import getopt
  7. import struct
  8. import re
  9. import string
  10.  
  11. try:
  12.     import psyco
  13.     psyco.full()
  14. except ImportError:
  15.     print 'Psyco optimizer not installed, running anyway...'
  16.  
  17. from socket import *
  18. from fcntl import ioctl
  19. from select import select
  20. from scapy import Raw, Ether, PrismHeader, Dot11, Dot11WEP, LLC, SNAP, sendp, conf
  21. TUNSETIFF = 1074025674
  22. IFF_TAP = 2
  23. TUNMODE = IFF_TAP
  24. IN_IFACE = 'ath0'
  25. OUT_IFACE = 'ath0raw'
  26. HAS_PRISM = 1
  27. WEP = 0
  28. KEYID = 0
  29. DEBUG = 0
  30. VERB = 0
  31. BSSID = ''
  32. UBSSID = ''
  33. WEPKEY = ''
  34.  
  35. def usage(status = 0):
  36.     print 'Usage: wifitap -b <BSSID> [-o <iface>] [-i <iface> [-p]] [-w <WEP key>'
  37.     print '                          [-k <key id>]] [-d [-v]] [-h]'
  38.     print '     -b <BSSID>    specify BSSID for injection'
  39.     print '     -o <iface>    specify interface for injection (default: ath0raw)'
  40.     print '     -i <iface>    specify interface for listening (default: ath0)'
  41.     print '     -p            listening interface does not provide Prism Headers'
  42.     print '     -w <key>      WEP mode and key'
  43.     print '     -k <key id>   WEP key id (default: 0)'
  44.     print '     -d            activate debug'
  45.     print '     -v            verbose debugging'
  46.     print '     -h            this so helpful output'
  47.     sys.exit(status)
  48.  
  49. opts = getopt.getopt(sys.argv[1:], 'b:o:i:w:k:pdvh')
  50. for opt, optarg in opts[0]:
  51.     if opt == '-b':
  52.         UBSSID = optarg
  53.         continue
  54.     if opt == '-o':
  55.         OUT_IFACE = optarg
  56.         continue
  57.     if opt == '-i':
  58.         IN_IFACE = optarg
  59.         continue
  60.     if opt == '-p':
  61.         HAS_PRISM = 0
  62.         continue
  63.     if opt == '-w':
  64.         WEP += 1
  65.         WEPKEY = optarg
  66.         continue
  67.     if opt == '-k':
  68.         KEYID = int(optarg)
  69.         continue
  70.     if opt == '-d':
  71.         DEBUG += 1
  72.         continue
  73.     if opt == '-v':
  74.         VERB += 1
  75.         continue
  76.     if opt == '-h':
  77.         usage()
  78.         continue
  79.  
  80. if not UBSSID:
  81.     print '\nError: BSSID not defined\n'
  82.     usage()
  83.  
  84. if re.match('^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$', UBSSID):
  85.     for i in range(17):
  86.         BSSID += UBSSID[i].lower()
  87.     
  88. else:
  89.     print '\nError: Wrong format for BSSID\n'
  90.     usage()
  91. if HAS_PRISM:
  92.     print 'IN_IFACE:   %s (Prism headers in capture)' % IN_IFACE
  93. else:
  94.     print 'IN_IFACE:   %s (no Prism headers in capture)' % IN_IFACE
  95. print 'OUT_IFACE:  %s' % OUT_IFACE
  96. print 'BSSID:      %s' % BSSID
  97. if WEP:
  98.     tmp_key = ''
  99.     if re.match('^([0-9a-fA-F]{2}){5}$', WEPKEY) or re.match('^([0-9a-fA-F]{2}){13}$', WEPKEY):
  100.         tmp_key = WEPKEY
  101.     elif re.match('^([0-9a-fA-F]{2}[:]){4}[0-9a-fA-F]{2}$', WEPKEY) or re.match('^([0-9a-fA-F]{2}[:]){12}[0-9a-fA-F]{2}$', WEPKEY):
  102.         tmp_key = re.sub(':', '', WEPKEY)
  103.     elif re.match('^([0-9a-fA-F]{4}[-]){2}[0-9a-fA-F]{2}$', WEPKEY) or re.match('^([0-9a-fA-F]{4}[-]){6}[0-9a-fA-F]{2}$', WEPKEY):
  104.         tmp_key = re.sub('-', '', WEPKEY)
  105.     else:
  106.         print '\nError : Wrong format for WEP key\n'
  107.         usage()
  108.     
  109.     g = lambda x: chr(int(tmp_key[::2][x], 16) * 16 + int(tmp_key[1::2][x], 16))
  110.     for i in range(len(tmp_key) / 2):
  111.         conf.wepkey += g(i)
  112.     
  113.     print 'WEP key:    %s (%dbits)' % (WEPKEY, len(tmp_key) * 4)
  114.     if KEYID > 3 or KEYID < 0:
  115.         print 'Key id:     %s (defaulted to 0 due to wrong -k argument)' % KEYID
  116.         KEYID = 0
  117.     else:
  118.         print 'Key id:     %s' % KEYID
  119. elif KEYID != 0:
  120.     print 'WEP not activated, key id ignored'
  121.  
  122. if not DEBUG:
  123.     if VERB:
  124.         print 'DEBUG not activated, verbosity ignored'
  125.     
  126. else:
  127.     print 'DEBUG activated'
  128.     if VERB:
  129.         print 'Verbose debugging'
  130.     
  131. conf.iface = OUT_IFACE
  132. if HAS_PRISM:
  133.     s = conf.L2listen(iface = IN_IFACE, filter = 'link[144]&0xc == 8 and link[145]&0xf == 1')
  134. else:
  135.     s = conf.L2listen(iface = IN_IFACE, filter = 'link[0]&0xc == 8 and link[1]&0xf == 1')
  136. f = os.open('/dev/net/tun', os.O_RDWR)
  137. ifs = ioctl(f, TUNSETIFF, struct.pack('16sH', 'wj%d', TUNMODE))
  138. ifname = ifs[:16].strip('\x00')
  139. print 'Interface %s created. Configure it and use it' % ifname
  140.  
  141. try:
  142.     while None:
  143.         r = select([
  144.             f,
  145.             s], [], [])[0][0]
  146.         if r == f:
  147.             buf = os.read(f, 1526)
  148.             eth_rcvd_frame = Ether(buf[4:])
  149.             if DEBUG:
  150.                 os.write(1, 'Received from %s\n' % ifname)
  151.                 if VERB:
  152.                     os.write(1, '%s\n' % eth_rcvd_frame.summary())
  153.                 
  154.             
  155.             dot11_sent_frame = Dot11(type = 'Data', FCfield = 'from-DS', addr1 = eth_rcvd_frame.getlayer(Ether).dst, addr2 = BSSID, addr3 = eth_rcvd_frame.getlayer(Ether).src)
  156.             if WEP:
  157.                 dot11_sent_frame.FCfield |= 64
  158.                 dot11_sent_frame /= Dot11WEP(iv = '111', keyid = KEYID)
  159.             
  160.             dot11_sent_frame /= LLC(ctrl = 3) / SNAP() / eth_rcvd_frame.getlayer(Ether).payload
  161.             if DEBUG:
  162.                 os.write(1, 'Sending from-DS to %s\n' % OUT_IFACE)
  163.                 if VERB:
  164.                     os.write(1, '%s\n' % dot11_sent_frame.summary())
  165.                 
  166.             
  167.             sendp(dot11_sent_frame, verbose = 0)
  168.             continue
  169.         dot11_rcvd_frame = s.recv(2346)
  170.         if DEBUG:
  171.             if dot11_rcvd_frame.haslayer(Dot11WEP):
  172.                 os.write(1, 'Received WEP from %s\n' % IN_IFACE)
  173.             else:
  174.                 os.write(1, 'Received from %s\n' % IN_IFACE)
  175.             if VERB:
  176.                 os.write(1, '%s\n' % dot11_rcvd_frame.summary())
  177.             
  178.         
  179.         if dot11_rcvd_frame.getlayer(Dot11).addr1 != BSSID:
  180.             continue
  181.         
  182.         if dot11_rcvd_frame.haslayer(SNAP):
  183.             eth_sent_frame = Ether(dst = dot11_rcvd_frame.getlayer(Dot11).addr3, src = dot11_rcvd_frame.getlayer(Dot11).addr2)
  184.             eth_sent_frame.payload = dot11_rcvd_frame.getlayer(SNAP).payload
  185.             eth_sent_frame.type = dot11_rcvd_frame.getlayer(SNAP).code
  186.             if DEBUG:
  187.                 os.write(1, 'Sending to %s\n' % ifname)
  188.                 if VERB:
  189.                     os.write(1, '%s\n' % eth_sent_frame.summary())
  190.                 
  191.             
  192.             buf = '\x00\x00' + struct.pack('!H', eth_sent_frame.type) + str(eth_sent_frame)
  193.             os.write(f, buf)
  194.             continue
  195. except KeyboardInterrupt:
  196.     print 'Stopped by user.'
  197.  
  198. s.close()
  199. os.close(f)
  200. sys.exit()
  201.